package light.head.framework.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author 简航 E-mail:janhang@126.com
 * 创建时间：2008-11-20 11:26:01
 */
public class DateUtils {
	
	public final static String yyyy_MM_dd = "yyyy-MM-dd";
	public final static String yyyy_MM_dd_HH_mm = "yyyy-MM-dd HH:mm";
	public final static String yyyy_MM_dd_HH_mm_ss = "yyyy-MM-dd HH:mm:ss";
	public final static String yyyyMMddHHmmss = "yyyyMMddHHmmss";
	public final static String yyyyMMddHHmm = "yyyyMMddHHmm";
	public final static String yyyyMMdd = "yyyyMMdd";
	public final static String MM_dd = "MM/dd";

	private static Date date;
	private static SimpleDateFormat sdf;
	
	/**
	 * 获取日期型数据的字符串
	 * @param	需要转换的日期
	 * @param	转换后的格式
	 * @return	转换好的字符串
	 * @author	简航 2008-11-20 11:29:44
	 */
	public static String getDateStr(Date d, String format) {
		sdf = new SimpleDateFormat(null != format ? format : yyyy_MM_dd);
		return sdf.format(d);
	}
	
	/**
	 * 格式化可以转为日期型的字符串, 如果源字符串为null或空字符串就直接返回源字符串, 需要输出的请自己判断
	 * @param	源字符串
	 * @param	时间格式
	 * @return	格式化后的字符串
	 * @author	简航
	 * 创建日期 2009-03-10 09:40:28
	 */
	@SuppressWarnings("deprecation")
	public static String getDateStr(String s, String format) {
		
		if (s == null || "".equals(s)) {
			return s;
		}
		
		format = format == null || "".equals(format) ? yyyy_MM_dd : format;
		sdf = new SimpleDateFormat(format);
		try {
			date = sdf.parse(s);
		} catch (ParseException e) {
			System.out.println("在DateHelper类中发生字符串转换日期异常!");
			long tempDate = Date.parse(s);
			date = new Date(tempDate);
			return getDateStr(date, format);
		}
		return sdf.format(date);
	}
	
	/**
	 * 将指定格式的字符串转换为日期对象
	 * @param	日期字符串
	 * @param	日期格式
	 * @return
	 */
	public static Date getDateByStr(String dateStr, String inputFormat) {
		Date result = null;
		try {
			sdf = new SimpleDateFormat(inputFormat != null ? inputFormat : yyyy_MM_dd);
			result = sdf.parse(dateStr);
			return result;
		} catch (ParseException e) {
			return null;
		}
	}
	
	
	
	/**
	 * 随机生成指定区间的时间，如果不指定区间将返回1970-1-1至今
	 * @param	开始时间
	 * @param	结束时间
	 */
	public static Date rand(Date start, Date end) {
		try {
			if (null == start)
				start = getDateByStr("1970-01-01", null);
			
			if (null == end)
				end = new Date();
			
			if (start.getTime() >= end.getTime())
				return null;
			
			long date = aidRand(start.getTime(), end.getTime());
			return new Date(date);
		} catch (Exception e) {
		}
		return null;
	}
	private static long aidRand(long begin, long end) {
		long rtn = begin + (long) (Math.random() * (end - begin));
		if (rtn == begin || rtn == end) {
			return aidRand(begin, end);
		}
		return rtn;
	}
}